2004年11月16日
川俣晶の縁側ソフトウェア技術雑記 total 3289 count

ソフト冒険記・Groovy

Written By: 川俣 晶連絡先

 Groovyを一度だけ使っておこうと思っていました。

 身体もボロボロ、時間もないけれど、(むしろ「だからこそ」)、強引に時間を割り込んで動かしてみました。

まずは、Hello World §

 とりあえず、対話モードを提供するgroovyshを使ってHello Worldを実現。

 入力した文字は強調してあります。

D:\delme\groovy-1.0-beta-7\bin>set JAVA_HOME=D:\Program Files\Java\jdk1.5.0

D:\delme\groovy-1.0-beta-7\bin>groovysh

Lets get Groovy!

================

Version: 1.0-beta-7 JVM: 1.5.0-b64

Type 'exit' to terminate the shell

Type 'help' for command help

groovy> println "Hello World!"

groovy> go

Hello World!

groovy>

 たったこれだけ。実にお手軽ですね。

for each構文 §

 なぜいつもサンプルがfor each構文かって?

 イテレータの列挙は好きだからです (笑。

 とりあえず、シンプルにやってみました。

groovy> [1, 2, 3].each { println it }

groovy> go

1

2

3

 問題なく綺麗に行きますね。

 あまりに綺麗に行きすぎたので、ネストしたデータを食わせたらどうなるのかと試してみました。

groovy> ["abc","def",[1, 2, 3]].each { println it }

groovy> go

abc

def

[1, 2, 3]

 うーん、綺麗に行きすぎ (笑。

 確かに、Groovyは良くできていると認めねばなりません。

レンジもあるでよ §

 うひょ~、レンジもありですか。

 こんなこともできちゃいましたよ。

groovy> (1..5).each { println it }

groovy> go

1

2

3

4

5

 しかも、こんなのまでありですか。

 これは面白い!

groovy> list=10..20

groovy> println list[2,4]

groovy> go

[12, 14]

 ここでlistは、10から20までのレンジを含んでいます。

 list[2,4]の構文は、2次元配列へのアクセスではなく、listの2番目と4番目のアイテムを取り出すことを示しています。(たぶん)。

 面白すぎますね。

===比較演算子 §

 はっきり言って、まとにドキュメント読んでません。

 ごく短時間、適当に見ている間に見つけた面白そうなものだけ試しています。

 というわけで、ふと目を引いたのは===演算子。イコール記号3個です。

 両者の違いを引き出すのに成功した事例を以下に示します。

groovy> println "aa" == "a" + "a"

groovy> go

true

groovy> println "aa" === "a" + "a"

groovy> go

false

 ==演算子は同値判定。

 ===は同参照判定、つまり.NET FrameworkのReferenceEquals相当ということのようですね。

 Javaの言語仕様の中で一貫性を欠いている使いにくい部分の1つが、値型と参照型で==演算子の意味が変わってしまう点だと思いますが、Groovyは綺麗に乗り越えているようですね。

 ますます、Groovyは良くできていると認めねばなりません。

強制中断 §

 面白すぎるので、ここで強制中断します。

 こんなもので遊んでいたら、仕事になりません (笑い

 かなり先入観が裏切られた気分です。良い意味で。

 Groovy入門、のような記事の依頼は引き受けても良いかな、と思いました。

 (などと書くとあとで苦しむ羽目になりますが)